# Инструкция по запуску тестов.

Помимо тестов на корректные выходные данные система автотестирования будет проверять вашу программу и ее исходный код по
следующим пунктам:

* **Стилевые тесты.** Чтобы проверить, насколько красота вашего кода соответствует стандартам, вы можете протестировать
  ваш код с помощью утилиты _clang-format_. В папке ```materials/linters``` лежит файл ```.clang-format```, который
  содержит необходимые настройки для стилевого теста. Данный конфигурационный файл распространяет свое действие на все
  файлы, которые лежат с ним в директории или в директориях ниже. Поэтому, чтобы данные настройки применились к вашим
  файлам с исходным кодом, скопируйте ```.clang-format``` в папку ```src```. \
  \
  Чтобы запустить проверку на стиль, выполните следующую команду: \
  ```clang-format -n src/sourcefile_name.c``` \
  \
  Чтобы скачать _clang-format_, введите в терминал одну из следующих команд: \
  ```brew install clang-format``` \
  или, если у вас есть root-права (для Ubuntu / Linux Mint / Debian) \
  ```sudo apt install clang-format```

  Необходимая версия: \
  **Mac** 14.0.5 \
  **Linux** 13.0.1

  Google Style: https://google.github.io/styleguide/cppguide.html


* **Тест на корректную работу с памятью.** При написании C-программ очень важно следить за утечками памяти. Для этого в
  Unix-подобных операционных системах довольно часто используют утилиту _valgrind_. Однако, на OS X имеются проблемы с
  поддержкой _valgrind_, поэтому вместо нее можно использовать утилиту _leaks_. Вдаваться в механизм работы этих утилит
  мы сейчас не будем — если интересно, можете почитать в гугле.

  **_LEAKS_**

  Чтобы запустить ваш исполняемый файл с помощью этой утилиты, наберите в терминале: \
  ```leaks -atExit -- ./main.out | grep LEAK:```

  Обратите внимание на команду ```| grep LEAK:```. Мы используем ее для короткого вывода, чтобы видеть только линии с
  утечками, если они есть. Если вы хотите увидеть весь вывод, просто удалите эту команду.

  При запуске исполняемого файла с помощью _leaks_ может появиться сообщение об ошибке:
  > dyld: could not load inserted library ‘/usr/local/lib/libLeaksAtExit.dylib’ because image not found

  Ошибка возникает из-за того, что _leaks_ не может найти библиотеку _libLeaksAtExit.dylib_. \
  В этом случае вам необходимо ввести следующие команды:
  ```sh
  cd /usr/local/lib  
  sudo ln -s /Applications/Xcode.app/Contents/Developer/usr/lib/libLeaksAtExit.dylib
  ```

  _Дополнительно:_ \
  Используйте флаг ```-exclude``` утилиты _leaks_ для того, чтобы отфильтровать утечки в функциях, где известно об
  утечках памяти. Этот флаг позволяет уменьшить количество посторонней информации, сообщаемой _leaks_.

  **_VALGRIND_**

  Чтобы установить _valgrind_ на компьютер, введите одну из следующих команд: \
  ```brew install valgrind``` \
  или, если у вас есть root-права (для Ubuntu / Linux Mint / Debian) \
  ```sudo apt install valgrind``` \
  Чтобы запустить ваш исполняемый файл с помощью этой утилиты, наберите в терминале: \
  ```valgrind --tool=memcheck --leak-check=yes  ./main.out```

  Не рекомендуется использовать _valgrind_ на OS X, вместо нее лучше использовать _leaks_.

* **Тест сборки.** Программу можно проверить на корректность сборки на тестовой системе. Для этого потребуется
  установленный _Docker_. Если на системе есть докер, то можно зайти в директорию `materials/build` и запустить оттуда
  скрипт run.sh. Скрипт обернет ваше решение в докер и запустит его вместе с типовым сценарием сборки.
